package server.comunicaciones;

import client.comunicaciones.IJugador;

import server.dominio.Sudoku;
import server.presentacion.JFServer;
import server.comunicaciones.IServer;
//import server.persistencia.FachadaPersistenciaSudoku;
//import server.persistencia.SudokuDAO;

import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.sql.SQLException;
import java.util.Hashtable;
import java.util.Vector;

public  class SudokuServer extends  Server {
	private java.util.Hashtable<Integer, server.dominio.Sudoku> cacheSudokus;
	private JFServer ventana;

	public SudokuServer(JFServer ventana) throws RemoteException {
        super();
        this.ventana=ventana;
        LocateRegistry.createRegistry(2395);
        cacheSudokus=new Hashtable<Integer, Sudoku>();
    }
	
	

	public void poner(String id, byte idCuadricula, byte fila, byte columna, byte numero) throws RemoteException {
        Sudoku sudoku=this.findServer(Integer.parseInt(id));
        if (sudoku==null) 
        	return;
        sudoku.poner(idCuadricula, fila, columna, numero);
    }

	public void quitar(String id, byte idCuadricula, byte fila, byte columna) throws RemoteException {
    	Sudoku sudoku=this.findServer(Integer.parseInt(id));
        if (sudoku==null) 
        	return;
        sudoku.quitar(idCuadricula, fila, columna);
    }
	
	public void conectar(int tipoPersistencia, String ubicacionSudokus) throws MalformedURLException, RemoteException {
        try {
            Naming.bind("rmi://127.0.0.1:2395/server", this);
           //	FachadaPersistenciaSudoku.buildInstancia(tipoPersistencia, ubicacionSudokus);
        }
        catch (AlreadyBoundException ex) {
            Naming.rebind("rmi://127.0.0.1:2395/server", this);
           // FachadaPersistenciaSudoku.buildInstancia(tipoPersistencia, ubicacionSudokus);
        }
    }

	public void desconectar() throws RemoteException, MalformedURLException, NotBoundException {
        Naming.unbind("rmi://127.0.0.1:2395/server");
    }
	/*public Vector<String> getServers() throws Exception {
		SudokuDAO dao=FachadaPersistenciaSudoku.getSudokuDAO();
    	Vector<String> result=dao.getServer();
    	return result;
    }*/

	/*public String getServer(IJugador jugador, String idSudoku, String idJugador) throws Exception {
		Sudoku result=this.findServer(Integer.parseInt(idSudoku));
		if (result==null) {
			result=new Sudoku(idSudoku);
			this.putServer(result);
		}
		if (result.findJugador(idJugador)!=null)
			throw new Exception("Ya hay un jugador con ese nombre en este sudoku");
		result.add(jugador, idJugador);
		result.setVentana(this.ventana);
		return result.toString();
	}

	private void putServer(Sudoku result) {
		this.cacheSudokus.put(result.getId(), result);
	}*/

	private Sudoku findSudoku(int id) {
		return (Sudoku) this.cacheSudokus.get(id);
	}

	public void guardar(String numeros) throws Exception {
		Sudoku sudoku=new Sudoku();
		sudoku.setNumeros(numeros);
		sudoku.insert();
	}
	
	
	public void Server(JFServer ventana) throws java.rmi.RemoteException {
		throw new UnsupportedOperationException();
	}

	@Override
	public Vector<String> getSudokus() throws RemoteException, SQLException,
			Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getSudoku(IJugador jugador, String idSudoku, String idJugador)
			throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Vector<String> getSudokuss() throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void putServer(Sudoku result) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Sudoku findServer(int id) {
		// TODO Auto-generated method stub
		return null;
	}
}